home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / admin / linuxcon.000 / linuxcon / linuxconf-1.6 / xconf / section2.c < prev    next >
C/C++ Source or Header  |  1995-01-16  |  4KB  |  161 lines

  1. /*
  2.     Locate a keyword in a dispatch table and creation an OPTION object if
  3.     found
  4. */
  5. static OPTION *disp_lookup(
  6.     SECTION_DISPATCH tbd[],
  7.     const char *keyw,
  8.     const char *arg,
  9.     FILE *fin,
  10.     const char *fname,
  11.     int &noline)
  12. {
  13.     OPTION *ret = NULL;
  14.     if (tbd != NULL){
  15.         for (int i=0; tbd[i].keyw != NULL; i++){
  16.             if (strcmp(tbd[i].keyw,keyw)==0){
  17.                 ret = (*tbd[i].f)(keyw,arg,fin);
  18.                 break;
  19.             }
  20.         }
  21.     }
  22.     return ret;
  23. }
  24.  
  25. static OPTION *screa_option(
  26.     const char *keyw,
  27.     const char *arg,
  28.     FILE *fin,
  29.     const char *fname,
  30.     int &noline)
  31. {
  32.     return new OPTION (keyw,arg);
  33. }
  34. static OPTION *screa_section(
  35.     const char *keyw,
  36.     const char *arg,
  37.     FILE *fin,
  38.     const char *fname,
  39.     int &noline)
  40. {
  41.     SECTION *ret = new SECTION;
  42.     ret->read (fin,fname,noline);
  43.     return ret;
  44. }
  45.  
  46. /*
  47.     Read a portion of a XF86Config file up to the EndSection.
  48. */
  49. PUBLIC int SECTION::readdisp (
  50.     FILE *fin,
  51.     const char *fname,    // Name of source file for error message
  52.     int &noline,
  53.     SECTION_DISPATCH disp[])
  54. {
  55.     char buf[500];
  56.     while (fgets_strip(buf,sizeof(buf)-1,fin,'\0','\0',&noline)!= NULL){
  57.         char *pt = str_strip (buf);
  58.         int opt_was_added = 0;
  59.         if (*pt == '#'){
  60.             opt_was_added = 1;    // Avoid error message
  61.         }else{
  62.             char keyw[100];
  63.             pt = str_copyword (keyw,pt);
  64.             pt = str_skip (pt);
  65.             OPTION *opt = disp_lookup (disp,keyw,pt,fin,fname,noline);
  66.             if (opt != NULL){
  67.                 opt_was_added = 1;    // Avoid error message
  68.                 tbopt.add (opt);
  69.             }
  70.         }
  71.     }
  72.  
  73.     if (opt_was_added != 0){
  74. //        xconf_error (
  75. //            "file %s, line %d\n\n"
  76. //            "Section %s don't allows suboption\n%s\n"
  77. //            ,fname,noline,parsing.section->keyw,buf);
  78.     }
  79.     return opt_was_added;
  80. }
  81.  
  82.  
  83. PUBLIC int KEYBOARD::read (
  84.     FILE *fin,
  85.     const char *fname,    // Name of source file for error message
  86.     int &noline)
  87. {
  88.     static SECTION_DISPATCH disp[]={    // Suboptions for Keyboard
  89.         {"ServerNumLock",    screa_option,    NULL},
  90.         {"AutoRepeat",        screa_option,    NULL},
  91.         {"Xleds",        screa_option,        NULL},
  92.         {"DontZap",        screa_option,        NULL},
  93.         {"LeftAlt",        screa_option,        NULL},
  94.         {"RightAlt",    screa_option,        NULL},
  95.         {"RightCtl",    screa_option,        NULL},
  96.         {"ScrollLock",    screa_option,        NULL},
  97.         {NULL,NULL,NULL}
  98.     };
  99.     return readdisp (fin,fname,noline,disp);
  100. }
  101.  
  102. PUBLIC int POINTER::read (
  103.     FILE *fin,
  104.     const char *fname,    // Name of source file for error message
  105.     int &noline)
  106. {
  107.     static SECTION_DISPATCH disp[]={    // Suboptions for Mouse
  108.         {"BaudRate",    screa_option,    NULL},
  109.         {"SampleRate",    screa_option,    NULL},
  110.         {"Emulate3Buttons",    screa_option,NULL},
  111.         {NULL,            NULL,NULL},
  112.     };
  113.     return readdisp (fin,fname,noline,disp);
  114. }
  115.  
  116. PUBLIC int DEVICE::read (
  117.     FILE *fin,
  118.     const char *fname,    // Name of source file for error message
  119.     int &noline)
  120. {
  121.     static SECTION_DISPATCH disp[]={    // Suboptions for ACCEL
  122.         {"Clocks",    screa_section,        NULL},
  123.         {"Modeline",    screa_option,        NULL},
  124.         {"Option",    screa_option,        NULL},
  125.         {"Viewport",    screa_option,    NULL},
  126.         {"Virtual",    screa_option,        NULL},
  127.         {NULL,NULL,NULL}
  128.     };
  129.     return readdisp (fin,fname,noline,disp);
  130. }
  131.  
  132. PUBLIC int FILES::read (
  133.     FILE *fin,
  134.     const char *fname,    // Name of source file for error message
  135.     int &noline)
  136. {
  137.     static SECTION_DISPATCH disp[]={
  138.         {"RGBPath",            screa_option,    NULL},
  139.         {"FontPath",        screa_option,    NULL},
  140.         {NULL,            NULL},
  141.     };
  142.     return readdisp (fin,fname,noline,disp);
  143. }
  144. #if 0
  145.     static SECTION_DISPATCH dispsect[]={
  146.         {"Keyboard",        screa_section,    dispkeyboard},
  147.         {"RGBPath",            screa_option,        NULL},
  148.         {"FontPath",        screa_option,    NULL},
  149.  
  150.         {"mousesystems",    screa_section,    dispmouse},
  151.         {"msmouse",            screa_section,    dispmouse},
  152.  
  153.         {"ACCEL",        screa_section,        dispaccel},
  154.         {"VGA2",            screa_section,    dispvga2},
  155.         {"ModeDB",        screa_section,        NULL},
  156.         {"NoTrapSignals", screa_option,        NULL},
  157.         {NULL,            NULL},
  158.     };
  159.  
  160. #endif
  161.